home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / mc / extfs / iso9660 < prev    next >
Text File  |  2009-10-25  |  2KB  |  89 lines

  1. #! /bin/sh
  2.  
  3. # ISO9660 VFS for MC by Michael Shigorin <mike@altlinux.org>,
  4. #   modifications by Grigory Milev <week@altlinux.org>
  5. #   and Kachalov Anton <mouse@linux.ru.net>   April 2003
  6. # based on lslR by Tomas Novak <tnovak@ipex.cz>   April 2000
  7. # -- look there for additional parsing comments if needed
  8.  
  9. # tested to comply with isoinfo 2.0's output
  10.  
  11. test_iso () {
  12.     CHARSET=`locale charmap 2>/dev/null`
  13.     if test -z "$CHARSET"; then
  14.     CHARSET=`locale 2>/dev/null | grep LC_CTYPE | sed -n -e 's/.*\.\(.*\)"$/\1/p'`
  15.     fi
  16.     if test -n "$CHARSET"; then
  17.     CHARSET=`echo "$CHARSET" | tr '[A-Z]' '[a-z]' | sed -e 's/^iso-/iso/'`
  18.     isoinfo -j $CHARSET -i /dev/null 2>&1 | grep "Unknown charset" >/dev/null && CHARSET=
  19.     fi
  20.     if test -n "$CHARSET"; then
  21.     JOLIET_OPT="-j $CHARSET -J"
  22.     else
  23.     JOLIET_OPT="-J"
  24.     fi
  25.     ISOINFO="isoinfo -R"
  26.     isoinfo -d -i "$1" | grep "NO Joliet" > /dev/null || ISOINFO="$ISOINFO $JOLIET_OPT"
  27. }
  28.  
  29. mcisofs_list () {
  30. # left as a reminder to implement compressed image support =)
  31. case "$1" in
  32.   *.lzma) MYCAT="lzma -dc";;
  33.   *.bz2) MYCAT="bzip2 -dc";;
  34.   *.gz)  MYCAT="gzip -dc";;
  35.   *.z)   MYCAT="gzip -dc";;
  36.   *.Z)   MYCAT="gzip -dc";;
  37.   *)     MYCAT="cat";;
  38. esac
  39.  
  40. $ISOINFO -l -i "$1" | mawk '
  41. BEGIN {
  42.   dir="";
  43.   # Pattern to match 8 first fields.
  44.   rx = "[^     ]+[     ]+";
  45.   rx = "^" rx rx rx rx rx rx rx rx;
  46.   irx = "^\\[ *[0-9]* *[0-9]+\\]  ";
  47. }
  48. /^$/ { next }
  49. /^d---------/ { next }
  50. /^Directory listing of [^     ].*$/ {
  51.   dir=substr($0, 23);
  52.   next;
  53. }
  54. { $11 != "" } {
  55.   name=$0
  56.   sub(rx, "", name)
  57.   attr=substr($0, 1, length($0)-length(name))
  58.   # strip inodes and extra dir entries; fix perms
  59.   sub(irx, "", name)
  60.   sub("^----------   0    0    0", "-r--r--r--   1 root root", attr)
  61.   sub(" $", "", name)
  62.   ## sub(";[0-9]+$", "", name) ## would break copyout
  63.   # skip . and ..
  64.   if (name ~ /^\.\.?/) next;
  65.   printf "%s%s%s\n", attr, dir, name
  66. }' 
  67. }
  68.  
  69. mcisofs_copyout () {
  70.     $ISOINFO -i "$1" -x "/$2" > "$3" 
  71. }
  72.  
  73. LC_ALL=C
  74.  
  75. cmd="$1"
  76. shift
  77.  
  78. case "$cmd" in
  79.   list)
  80.     test_iso "$@";
  81.     mcisofs_list "$@";
  82.     exit 0;;
  83.   copyout)
  84.     test_iso "$@";
  85.     mcisofs_copyout "$@";
  86.     exit 0;;
  87. esac
  88. exit 1
  89.